﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace RattlerRace
{
    public class TimeBar
    {
        private int _value;

        /* KOMENTAR
        * Spremenljivka _isRunning nam pove ali timer teče. Odločil sem se da je bolj pametno, če jo sprva nastavimo na false,
        * saj nam to omogoča, da lahko kasneje ob specifičnem času poženemo timer z metodo startTimeBar.
        */
        private bool _isRunning;

        public TimeBar()
        {
            _value = 0;
            _isRunning = false;
        }

        public TimeBar(int v)
        {
            _value = v;
            _isRunning = false;
        }

        public int Value
        {
            get { return _value; }
            set { _value = value; }
        }

        public bool IsRunning
        {
            get { return _isRunning; }
            set { _isRunning = value; }
        }

        /// <summary>
        /// Metoda, ki požene timer, oziroma nastavi spremenljivko _isRunning na true.
        /// </summary>
        public void startTimeBar()
        {
            if (this._isRunning == false)
            {
                this._isRunning = true;
            }
        }

        /// <summary>
        /// Metoda, ki ustavi timer, oziroma nastavi spremenljivko _isRunning na false
        /// </summary>
        public void stopTimeBar()
        {
            if (this.IsRunning == true)
            {
                this._isRunning = false;
            }
        }

        /// <summary>
        /// Metoda, ki skrbi za osveževanje in pravilno delovanje timerja. Kliče se v vsakem koraku (ticku) igre.
        /// Ko vrednost timerja pade na 0, se generirajo nova jabolka, vrednost pa se nastavi na novo
        /// Sicer pa odštevamo 1 od trenutne vrednosti.
        /// </summary>
        /// <param name="existingApples"></param> seznam obstoječih jabolk, ki ga potrebujemo za klic metode generateApples, v primeru da je timer padel na 0
        /// <param name="gameGrid"></param> mreža igre, ki jo pravtako potrebujemo za klic metode generateApples
        /// <param name="standardValue"></param> vrednost, na katero se nastavi timer po tem, ko je dosegel 0. OPOZORILO: ta vrednost mora biti enaka kot tista, ki smo jo vnesli ob ustvarjanju timerja (v konstruktor)
        public void decreaseTime(ref List<Apple> existingApples, Block[,] gameGrid, int standardValue)
        {
            /*
             * KOMENTAR
             * Ker metoda pod določenimi pogoji kliče metodo generateApples iz razreda Apple, sem moral dodati parametre, ki ta klic omogočajo.
             * Parameter standardValue se striktno ne sme spreminjati, saj nam pove kolikšna je maksimalna vrednost timerja, na katero se nastavi po tem, ko je padel na 0
             *          -to lahko implementiramo kako drugače, vendar ta rešitev zaenkrat zadostuje.
             */
            if (this.IsRunning)
            {
                if (this.Value == 0)
                {
                    Apple.generateApples(ref existingApples, ref gameGrid);
                    this.Value = standardValue;
                }
                else
                {
                    this.Value--;
                }
            }
        }
    }
}

